#!/usr/bin/env python
# -*- encoding: utf-8 -*-

import MySQLdb

# DB 연결
db = MySQLdb.connect(host='localhost', user='esjeong80', passwd='0505jiny', db='esjeong80', charset="utf8")
print "\nMySQL 접속 : ", db, "\n"

cursor = db.cursor()	# 커서 객체 얻기

# 인코딩 설정 (DB 연결시 charset을 지정하거나, 특정커서만 charset을 지정하거나 하면 됨)
cursor.execute("set names utf8")

# 테이블 삭제
cursor.execute("drop table pet")

# 테이블 생성
iRet = cursor.execute("""create table pet (
	name varchar(20),
	owner varchar(20),
	species varchar(20),
	sex char(1),
	birth DATE,
	death DATE)""")
print "테이블 생성 결과 : ", iRet, "\n"

# 테이블 확인
cursor.execute("show tables")
print "테이블 정보 확인 : ", cursor.description, "\n"


# 데이터 삽입
iRet = cursor.execute("insert into pet (name, owner, species, sex, birth, death)\
		values ('꼬마', '정은석', '치와와', 'F', '2000-02-01', NULL)")
print "데이터 삽입 결과 : ", iRet

# 다수 데이터 일괄 삽입
data = """
'초롱이', '임진희', '시츄', 'F', '2001-02-01', NULL
'딸랑이', '홍길동', '요크셔', 'F', '2003-01-01', NULL
'이쁜이', '임꺽정', '똥개', 'M', '2002-04-01', '2008-10-30'
'못난이', '춘향이', '잡종', 'M', '2005-08-01', NULL
'얌생이', '뫼돌이', '진돗개', 'F', '2008-07-01', NULL
'빛나리', '김민희', '사냥개', 'M', '2009-03-01', '2013-09-01'
'쿨럭이', '김태희', '푸들', 'M', '2003-02-06', NULL
'쫑쫑이', '한채영', '허스키', 'F', '2004-04-01', NULL
"""

for line in data.split('\n'):
	line = line.strip()
	if line == '': continue
	iRet = cursor.execute("insert into pet (name, owner, species, sex, birth, death) values(%s)" % line)
	print "다수 데이터 삽입 결과 : ", iRet
print ""

# 레코드 검색
iRet = cursor.execute("select * from pet")
print "레코드 검색 결과 : ", iRet
print "커서의 Row 수 : ", cursor.rowcount
print ""

# 조회된 레코드의 필드별 특성 조회
print "필드별 특성 조회 : (필드명, 데이터형_코드, 표시크기, 내부크기, 정확도, 비율, null가능여부)"
print cursor.description
print ""

# 1개 Row 조회
print "=== 1 Row 조회 결과(자료형을 그대로 출력) ==="
print cursor.fetchone()		# 리스트나 튜플 자료형을 그대로 출력하면 한글이 깨진다. 각 요소를 출력시켜야 함.
print ""

rec = cursor.fetchone()
print "=== 1 Row 조회 결과 ==="
print "[",
for i in range(len(rec)):
	print rec[i],
print "]\n"


# N개 Rows 조회
recs = cursor.fetchmany(3)
print "=== N Rows 조회 결과 ==="
for rec in recs:
	print "[",
	for i in range(len(rec)):
		print rec[i],
	print "]"
print ""

# 모든 Rows 조회
recs = cursor.fetchall()
print "=== 모든 Rows 조회 결과 ==="
for rec in recs:
	print "[",
	for i in range(len(rec)):
		print rec[i],
	print "]"
print ""

print "커서 닫기\n"
cursor.close()	# 커서 닫기


# 사전 형식으로 데이터 조회
cursor = db.cursor(MySQLdb.cursors.DictCursor)
cursor.execute('select * from pet')

print "=== 사전형식으로 모든 Rows 조회 결과 ==="

recs = cursor.fetchall()
rowcnt = len(recs)

if rowcnt < 1:
	print "No Rows"
else:
	for idx in range(rowcnt):
		print "[",
		print recs[idx]['name'],
		print recs[idx]['owner'],
		print recs[idx]['species'],
		print recs[idx]['sex'],
		print recs[idx]['birth'],
		print recs[idx]['death'],
		print "]"
	print ""

# 커밋/롤백
#print "Commit 수행"
#db.commit()
#print "Rollback 수행"
#db.rollback()

# 테이블 삭제
#cursor.execute("drop table pet")

print "커서 닫기\n"
cursor.close()

print "DB 연결 종료\n"
db.close()

print "프로그램 종료\n"
raw_input("Press Enter...")
